﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using GC2.Entities.Seguridad;
using GC2.Entities.Admin;
using GC2.Bussines.BMAdmin;

public partial class Empleados_Sueldos: GenericPage
{
    #region Propiedades
    Usuarios usuario = new Usuarios();
    private string scriptSession
    {
        get
        {
            return (string)Session["scriptSession"];
        }
        set
        {
            Session["scriptSession"] = value;
        }
    }

    #endregion

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!this.IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];
                lblAccion.Text = "";
                btnOtro.Visible = false;             
                List<Empleados> listaEmpleados = new List<Empleados>();
                BMEmpleados bmEmpleados = new BMEmpleados(Connection);
                listaEmpleados = bmEmpleados.BMEmpleadosGetAll();
                Session["listaEmpleados"] = listaEmpleados;
                lblAccion.Text = "Seleccionar Empleado";
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtIdEmpleado_TextChanged
    protected void txtIdEmpleado_TextChanged(object sender, EventArgs e)
    {
        try
        {
            txtSaldo.Text = "";
            BuscarEmpleado();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnBuscarEmpleado_Click
    protected void btnBuscarEmpleado_Click(object sender, EventArgs e)
    {
        try
        {
            txtSaldo.Text = "";
            BuscarEmpleado();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region rdbSueldo_CheckedChanged
    protected void rdbSueldo_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbSueldo.Checked)
            {
                trAdelanto.Visible = true;
                rdbAdelanto.Checked = false;
            }
            else
            {
                trAdelanto.Visible = false;
                rdbAdelanto.Checked = true;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region rdbAdelanto_CheckedChanged
    protected void rdbAdelanto_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbAdelanto.Checked)
            {
                trAdelanto.Visible = false;
                rdbSueldo.Checked = false;
            }
            else
            {
                trAdelanto.Visible = true;
                rdbSueldo.Checked = true;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnGuardar_Click
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
            if (txtMonto.Text != "")
            {
                Guardar();
            }
            else
            {
                // mensaje monto cero
                lblMensaje.Text = "No puede generar un Concepto con Monto Cero.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnOtro_Click
    protected void btnOtro_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCancelar_Click
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        try
        {
            Response.Redirect("~/Seguridad/Default.aspx", false);
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region chkSaldo_CheckedChanged
    protected void chkSaldo_CheckedChanged(object sender, EventArgs e)
    {
        if (chkSaldo.Checked == true)
        {
            decimal dSaldo = Convert.ToDecimal(txtSaldo.Text.Trim()) * (-1);
            txtAdelanto.Text = dSaldo.ToString();
        }
    }
    #endregion

    #endregion

    #region Métodos

    #region BuscarEmpleado
    public void BuscarEmpleado()
    {
        try
        {
            List<Empleados> listaEmpleados = new List<Empleados>();
            listaEmpleados = (List<Empleados>)Session["listaEmpleados"];
            Empleados empleado = new Empleados();
            if (txtIdEmpleado.Text.Trim() != "")
            {
                empleado.Id_Empleado = Convert.ToInt16(txtIdEmpleado.Text.Trim());
            }
            empleado.Nombre = txtEmpleado.Text.Trim();

            bool encontrado = false;
            foreach (Empleados item in listaEmpleados)
            {
                if (item.Id_Empleado == empleado.Id_Empleado)
                {
                    txtIdEmpleado.Text = item.Id_Empleado.ToString();
                    txtEmpleado.Text = item.Nombre;
                    txtSaldo.Text = item.Saldo.ToString();
                    encontrado = true;
                    break;
                }
                if (item.Nombre == empleado.Nombre)
                {
                    txtIdEmpleado.Text = item.Id_Empleado.ToString();
                    txtEmpleado.Text = item.Nombre;
                    txtSaldo.Text = item.Saldo.ToString();
                    encontrado = true;
                    break;
                }
            }

            if (!encontrado)
            {
                txtIdEmpleado.Text = "";
                txtEmpleado.Text = "";
                #region dispararPopUp(hacePostBack)

                string scriptSession = @"
            <script language=""javascript"" type=""text/javascript"">
            <!--
                function mostrarEmpleado()
                {
                    var stringURL = '../Admin/BuscarEmpleado.aspx?pStation=0';
                    var oINPUTS = document.getElementsByTagName (""INPUT"");
                    for(var a=0;a<oINPUTS.length; a++)
                    {
                        //Validaciones para cuando el control fue arrastrado a un PopUP (Sin MasterPage)

                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtIdEmpleado')
                        {
                            alert('U1a: &IdEmpleado = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Id_Empleado=' + oINPUTS[a].getAttribute(""value"");
                        }
                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtEmpleado')
                        {  
                            //alert('U2a: &Empleado = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Empleado=' + oINPUTS[a].getAttribute(""value"");
                        }
                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtSaldo')
                        {  
                            alert('U3a: &Saldo = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Saldo=' + oINPUTS[a].getAttribute(""value"");
                        }
                    }
                    // alert(stringURL);
                    var newWin = window.open(stringURL, ""popup"", ""menubar=no, resizable=no, scrollbars=yes, height=450, width=550, left=100, top=100"");
                }
                mostrarEmpleado();
            //-->
            </script>
            ";

                Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptA", scriptSession);
                #endregion
            }

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Guardar
    protected void Guardar()
    {
        try
        {
            Empleados empleado = new Empleados();
            List<Empleados> listaEmpleados = new List<Empleados>();
            BMEmpleados bmEmpleados = new BMEmpleados(Connection);
            listaEmpleados = (List<Empleados>)Session["listaEmpleados"];
            empleado.Id_Empleado = Convert.ToInt16(txtIdEmpleado.Text.Trim());
            lblAccion.Text = "NO se pudo actualizar Empleado";
            BMEgresos bmEgresos = new BMEgresos(Connection);
            Egresos egreso = new Egresos();
            BMIngresos bmIngresos = new BMIngresos(Connection);
            Ingresos ingreso = new Ingresos();
            Cajas oCaja = new Cajas();
            oCaja = (Cajas)Session["Caja"];
            if (oCaja == null)
            {
                oCaja = CajaAbierta();
            }
            string sNombre = "";
            Usuarios usuario = (Usuarios)Session["UsuarioActual"];

            for (int i = 0; i < listaEmpleados.Count; i++)
            {
                if (listaEmpleados[i].Id_Empleado == empleado.Id_Empleado)
                {
                    // actualizar empleado
                    empleado = listaEmpleados[i];
                    Decimal dMonto = Convert.ToDecimal(txtMonto.Text.Trim());
                    if (dMonto == 0)
                    {
                        lblMensaje.Text = "No puede generar un Concepto con Monto Cero.";
                        mpeMensaje.Show();
                        break;
                    }
                    if (rdbSueldo.Checked)
                    {
                        // Es Sueldo
                        if (chkSaldo.Checked && empleado.Saldo != 0)
                        {
                            // Limpiar Saldo
                            Decimal dSaldoAnt = empleado.Saldo;
                            Decimal dSaldo = 0;
                            empleado.Saldo = 0;
                            bmEmpleados.BMEmpleadosUpdate(empleado);
                            decimal decSaldo = Convert.ToDecimal(dSaldo);
                            decimal decTemp = Math.Round(decSaldo, 2);
                            txtSaldo.Text = decTemp.ToString();

                            // grabar ingreso de caja por el total
                            ingreso = bmIngresos.BMIngresosGetNext();   // ingreso.Id_Ingreso
                            ingreso.Fecha = DateTime.Now.Date;
                           
                            ingreso.Id_Caja = oCaja.Id_Caja;
                            ingreso.Id_Cliente = empleado.Id_Empleado;
                            if (sNombre.Length > 42)
                            {
                                sNombre = empleado.Nombre.Remove(43);
                            }
                            else
                            {
                                sNombre = empleado.Nombre;
                            }

                            ingreso.Id_Concepto = 999;
                            ingreso.Concepto = "Devolucion Adelanto " + sNombre;

                            ingreso.Id_Usuario = usuario.Id_Usuario;
                            ingreso.Monto = dSaldoAnt * -1;
                            bmIngresos.BMIngresosInsert(ingreso);

                        }
                        else
                        {
                            if (empleado.Saldo == 0)
                            {
                                trAdelanto.Visible = false;
                            }
                            else
                            {
                                // devolucion parcial de adelanto
                                Decimal dSaldoAnt = empleado.Saldo;
                                Decimal dDevolucion = Convert.ToDecimal(txtAdelanto.Text.Trim());
                                Decimal dDiferencia = dSaldoAnt + dDevolucion;
                                if (dDiferencia > 0)
                                {
                                    lblMensaje.Text = "No puede devolver mas de lo que debe.";
                                    mpeMensaje.Show();
                                    break;
                                }

                                // grabar ingreso de caja por el total
                                
                                ingreso = bmIngresos.BMIngresosGetNext();   // ingreso.Id_Ingreso
                                ingreso.Fecha = DateTime.Now.Date;
                                
                                ingreso.Id_Caja = oCaja.Id_Caja;
                                ingreso.Id_Cliente = empleado.Id_Empleado;
                                if (sNombre.Length > 42)
                                {
                                    sNombre = empleado.Nombre.Remove(43);
                                }
                                else
                                {
                                    sNombre = empleado.Nombre;
                                }

                                ingreso.Id_Concepto = 999;
                                ingreso.Concepto = "Devolucion Adelanto " + sNombre;

                                ingreso.Id_Usuario = usuario.Id_Usuario;
                                ingreso.Monto = dSaldoAnt * (-1);
                                bmIngresos.BMIngresosInsert(ingreso);

                                // grabar egreso de caja por la diferencia.
                                egreso = bmEgresos.BMEgresosGetNext();   // egreso.Id_Egreso 
                                egreso.Fecha = DateTime.Now.Date;
                                egreso.Id_Caja = oCaja.Id_Caja;
                                egreso.Id_Proveedor = empleado.Id_Empleado;

                                egreso.Id_Concepto = 999;
                                egreso.Concepto = "Adelanto " + sNombre;
                                egreso.Id_Usuario = usuario.Id_Usuario;
                                egreso.Monto = dDiferencia * -1;
                                egreso.Observaciones = "Diferencia devolucion parcial de Adelanto";
                                bmEgresos.BMEgresosInsert(egreso);

                                empleado.Saldo = dDiferencia;
                                bmEmpleados.BMEmpleadosUpdate(empleado);
                                decimal decTempA = Math.Round(dDiferencia, 2);
                                txtSaldo.Text = decTempA.ToString();
                            }
                        }
                    }
                    else
                    {
                        // Es Adelanto
                        
                        Decimal dSaldo = empleado.Saldo - dMonto;
                        empleado.Saldo = dSaldo;
                        bmEmpleados.BMEmpleadosUpdate(empleado);
                        decimal decSaldo = Convert.ToDecimal(dSaldo);
                        decimal decTemp = Math.Round(decSaldo, 2);
                        txtSaldo.Text = decTemp.ToString();
                    }

                    // grabar egreso de caja
                    egreso = bmEgresos.BMEgresosGetNext();   // egreso.Id_Egreso 
                    //string sFecha = System.DateTime.Now.ToShortDateString();
                    //egreso.Fecha = Convert.ToDateTime(sFecha);
                    egreso.Fecha = DateTime.Now.Date;
                    
                    egreso.Id_Caja = oCaja.Id_Caja;
                    egreso.Id_Proveedor = empleado.Id_Empleado;
                    
                    if (sNombre.Length > 42)
                    {
                        sNombre = empleado.Nombre.Remove(43);
                    }
                    else
                    {
                        sNombre = empleado.Nombre;
                    }
                    if (rdbSueldo.Checked)
                    {
                        egreso.Id_Concepto = 1000;
                        egreso.Concepto = "Sueldo " + sNombre;
                        egreso.CCostos = empleado.CCostos;
                        lblAccion.Text = "Pago a Empleado Actualizado";
                    }
                    else
                    {
                        egreso.Id_Concepto = 999;
                        egreso.Concepto = "Adelanto " + sNombre;
                        lblAccion.Text = "Adelanto a Empleado Registrado";
                    }

                    
                    egreso.Id_Usuario = usuario.Id_Usuario;
                    egreso.Monto = dMonto;
                    egreso.Observaciones = txtObservaciones.Text.Trim();
                    bmEgresos.BMEgresosInsert(egreso);
                    
                    btnGuardar.Visible = false;
                    btnOtro.Visible = true;
                    
                    Session["listaEmpleados"] = listaEmpleados;
                    break;
                }
            }      
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Limpiar
    protected void Limpiar()
    {
        try
        {
            txtIdEmpleado.Text = "";
            txtEmpleado.Text = "";
            txtSaldo.Text = "";
            txtMonto.Text = "";
            txtObservaciones.Text = "";
            lblAccion.Text = "Seleccionar Empleado";
            chkSaldo.Checked = false;
            txtAdelanto.Text = "";
            btnOtro.Visible = false;
            btnGuardar.Visible = true;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    #endregion

    #endregion
}
